﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using EFong.Contract;

namespace EFong.ServicesInterface
{
    [ServiceContract]
    public interface IBusinessService
    {
        [OperationContract]
        ServiceResult<string> NewFlightOrder(FlightOrder flightOrder);

        [OperationContract]
        ServiceResult<string> UpdateFlightOrder(FlightOrder flightOrder);

        [OperationContract]
        ServiceResult VoidFlightOrder(FlightOrder flightOrder , string cause);

        [OperationContract]
        ServiceResult KeepFlightOrderDetail(FlightOrderDatail flightOrderDatail);

        [OperationContract]
        ServiceResult<string> ChangeFlightOrder(FlightChange flightChange, FlightOrderDatail flightOrderDatail, decimal profit);

        [OperationContract]
        ServiceResult<string> ReturnFlightOrder(FlightReturn flightReturn,FlightOrderDatail flightOrderDatail,decimal profit);

        [OperationContract]
        ServiceResult<string> NewTrainTicketOrder(TrainTicketOrder trainTicketOrder);

        [OperationContract]
        ServiceResult<string> UpdateTrainTicketOrder(TrainTicketOrder trainTicketOrder);

        [OperationContract]
        ServiceResult VoidTrainTicketOrder(TrainTicketOrder trainTicketOrder, string cause);

        [OperationContract]
        ServiceResult<string> ReturnTrainTicketOrder(TrainTicketReturn trainTicketReturn, TrainTicketOrderDetail trainTicketOrderDetail, decimal profit);

        [OperationContract]
        ServiceResult<string> NewHotelBooking(HotelBooking hotelBooking);

        [OperationContract]
        ServiceResult<string> UpdateHotelBooking(HotelBooking hotelBooking);

        [OperationContract]
        ServiceResult VoidHotelBooking(HotelBooking hotelBooking, string cause);

        [OperationContract]
        ServiceResult<string> NewOtherBusiness(OtherBusiness otherBusiness);

        [OperationContract]
        ServiceResult<string> UpdateOtherBusiness(OtherBusiness otherBusiness);

        [OperationContract]
        ServiceResult VoidOtherBusiness(OtherBusiness otherBusiness, string cause);

        [OperationContract]
        ServiceResult IntergralExchange(IntergralExchange intergralExchange);

        [OperationContract]
        ServiceResult<List<IntergralExchange>> GetIntergralExchangeByMonth(DateTime month);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByRef(string _ref);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetAllFlightOrder();

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByCustomer(RCustomer customer);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByOrderDate(DateTime startDate, DateTime endDate);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByVendor(RVendor vendor);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByPassenger(string passenger);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByTicketNo(string ticketNo);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByAirwaysOrderNo(string airwaysOrderNo);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByWayType(string wayType);

        [OperationContract]
        ServiceResult<List<RFlightOrder>> GetFlightOrderByJourneyOrder(string journeyOrder);

        [OperationContract]
        ServiceResult<FlightOrder> GetFlightOrderByID(Guid id);

        [OperationContract]
        ServiceResult<List<RTrainTicketOrder>> GetAllTrainTicketOrder();

        [OperationContract]
        ServiceResult<List<RTrainTicketOrder>> GetTrainTicketOrderByRef(string _ref);

        [OperationContract]
        ServiceResult<List<RTrainTicketOrder>> GetTrainTicketOrderByCustomer(RCustomer customer);

        [OperationContract]
        ServiceResult<List<RTrainTicketOrder>> GetTrainTicketOrderByOrderDate(DateTime startDate, DateTime endDate);

        [OperationContract]
        ServiceResult<List<RTrainTicketOrder>> GetTrainTicketOrderByVendor(RVendor vendor);

        [OperationContract]
        ServiceResult<TrainTicketOrder> GetTrainTicketOrderByID(Guid id);

        [OperationContract]
        ServiceResult<List<RHotelBooking>> GetAllHotelBooking();

        [OperationContract]
        ServiceResult<List<RHotelBooking>> GetHotelBookingByRef(string _ref);

        [OperationContract]
        ServiceResult<List<RHotelBooking>> GetHotelBookingByGuestName(string guestName);

        [OperationContract]
        ServiceResult<List<RHotelBooking>> GetHotelBookingByCustomer(RCustomer customer);

        [OperationContract]
        ServiceResult<List<RHotelBooking>> GetHotelBookingByOrderDate(DateTime startDate, DateTime endDate);

        [OperationContract]
        ServiceResult<List<RHotelBooking>> GetHotelBookingByVendor(RVendor vendor);

        [OperationContract]
        ServiceResult<HotelBooking> GetHotelBookingByID(Guid id);

        [OperationContract]
        ServiceResult<List<ROtherBusiness>> GetAllOtherBusiness();

        [OperationContract]
        ServiceResult<List<ROtherBusiness>> GetOtherBusinessByRef(string _ref);

        [OperationContract]
        ServiceResult<List<ROtherBusiness>> GetOtherBusinessByCustomer(RCustomer customer);

        [OperationContract]
        ServiceResult<List<ROtherBusiness>> GetOtherBusinessByOrderDate(DateTime startDate, DateTime endDate);

        [OperationContract]
        ServiceResult<List<ROtherBusiness>> GetOtherBusinessByVendor(RVendor vendor);

        [OperationContract]
        ServiceResult<List<ROtherBusiness>> GetOtherBusinessByProject(Project project, SubProject subProject, string content);

        [OperationContract]
        ServiceResult<OtherBusiness> GetOtherBusinessByID(Guid id);

        [OperationContract]
        ServiceResult<List<Contract.RFlightOrder>> GetFlightOrderByIsKeep(bool isKeep);
    }
}
